package br.edu.infnet.repositorio;

import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.Query;

import br.edu.infnet.dao.ContaDao;
import br.edu.infnet.dao.MovimentoDao;
import br.edu.infnet.model.Cliente;
import br.edu.infnet.model.Conta;
import br.edu.infnet.model.Movimento;

@Stateless
@LocalBean
public class RepositorioConta implements IRepositorio<Conta> {
	@EJB
	private ContaDao dao;
	
	@EJB
	private MovimentoDao mdao;
	
	
	public RepositorioConta() {

	}
	
	
	@Override
	public void criar(Conta entity) {
		
		dao.save(entity);
		
	}

	@Override
	public void remover(Conta entity) {
		dao.delete(entity);
		
	}

	@Override
	public void atualizar(Conta entity) {
		dao.update(entity);
		
	}

	@Override
	public Conta consultarporID(int id) {
		Conta conta = dao.findById(id);
		return conta;
	}

	@Override
	public List<Conta> consultarTodos() {
		List<Conta> contas = dao.findAll(Conta.getFindAll());
		return contas;
	}
	

	public List<Conta> consultarPorCliente(Cliente param) {
		
		Query q = dao.getEm().createQuery("SELECT c FROM Conta c where cliente=?");
		q.setParameter(1, param);
		
		List<Conta> result = dao.ListResultQuery(q);
		
		return result;

	}
	
	public List<Movimento> movimentoPorPeriodo(Date inicio, Date fim) {
		List<Movimento> movimentos = new ArrayList<Movimento>();
		
		movimentos = dao.extratoPorData(inicio, fim);
			
		return movimentos;
		
	
	}
	
	
	public List<Conta> consultarPendentes(int agencia) {
		List<Conta> contas = null;
		
		contas = dao.ListaContasPendentes(agencia);
		
		return contas;
		
	}
	
	public void incluirMovimento(Movimento movimento) {
		mdao.save(movimento);
		
	}
	


}
